package view;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.GridLayout;
import java.util.List;

import javax.swing.BoxLayout;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;

import model.Bestellung;
import model.Kunde;

public class KundenAnzeigeLeiste extends JInternalFrame implements KundenDetailAnzeige{

	private static final long serialVersionUID = 8035778888353956836L;
	
	private Frame owner;
	
	private JPanel kundenAnzeige = new JPanel(new GridLayout(2, 2));
	private JLabel kundenNrLabel = new JLabel("Kundennummer:  ");
	private JTextField kundenNrText = new JTextField();
	private JLabel kundenNameLabel = new JLabel("Name:  ");
	private JTextField kundenNameText = new JTextField();
	
	private JList bestellungen = new JList();
	private JScrollPane bestellungenScroll;
	
	private JLabel keineBestellungenLabel = new JLabel("Keine Bestellungen vorhanden");
	
	private JPanel bestellungsAnzeige = new JPanel();
	
	public KundenAnzeigeLeiste(Frame owner){
		super();
		this.setTitle("Kundenanzeige");
		this.owner = owner;
		
		bestellungen.setCellRenderer(new BestellListenZeichner());
		
		initializeLayout();
		this.setResizable(true);
		
		zeigeKunde(null, null);
	}
	
	private void initializeLayout(){
		this.getContentPane().setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
		
		kundenAnzeige.add(kundenNrLabel);
		kundenAnzeige.add(kundenNrText);
		kundenAnzeige.add(kundenNameLabel);
		kundenAnzeige.add(kundenNameText);
		
		kundenNrText.setEditable(false);
		kundenNameText.setEditable(false);
		
		this.add(kundenAnzeige);

		bestellungen.setVisibleRowCount(17);
		bestellungenScroll = new JScrollPane(bestellungen, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
		bestellungsAnzeige.setPreferredSize(new Dimension(250, 300));
		
		bestellungsAnzeige.add(bestellungenScroll);
		this.add(bestellungsAnzeige);
		
	}

	@Override
	public void doLayout() {

		this.setPreferredSize(this.getSize());
		super.doLayout();
	}
	

	@Override
	public void zeigeKunde(Kunde kunde, List<Bestellung> bestellungen) {
		
		if(kunde != null){
			kundenNrText.setText(String.valueOf(kunde.getKundennr()));
			kundenNameText.setText(kunde.getName().toString());
		}else{
			kundenNrText.setText("");
			kundenNameText.setText("");
		}
		
		bestellungsAnzeige.removeAll();
		
		if(bestellungen == null || bestellungen.isEmpty()){
			bestellungsAnzeige.add(keineBestellungenLabel);
		}else{
			this.bestellungen.setListData(bestellungen.toArray(new Bestellung[0]));
			bestellungsAnzeige.add(bestellungenScroll);
		}
		kundenAnzeige.validate();
		bestellungsAnzeige.validate();

		this.validate();
		this.pack();
	}
	
	
	private class BestellListenZeichner implements ListCellRenderer {
		
		private JLabel item;
		@Override
		public Component getListCellRendererComponent(JList list, Object objectToDraw,
				int index, boolean isSelected, boolean hasFocus) {
			
			Bestellung bestellung = (Bestellung) objectToDraw;
			String toShow = String.format("%d %s %s %.2f",bestellung.getAuftragsnummer(),
								bestellung.getBestelldatum(),
								bestellung.getStatus(),
								bestellung.getPreis()); 
			item = new JLabel(toShow);
			
			Color background;
			Color foreground;
			
			// check if this cell is selected
			if (isSelected) {
				background = Color.BLUE;
				foreground = Color.WHITE;
			
			// unselected, and not the DnD drop location
			} else {
				background = Color.WHITE;
				foreground = Color.BLACK;
			};
			
			item.setOpaque(true);
			item.setBackground(background);
			item.setForeground(foreground);
			
			
			return item;
		}
	}
}
